//
//  ZYStateImp.h
//  DesignMode
//
//  Created by wangzhipan on 2024/10/31.
//

#import <Foundation/Foundation.h>

/*
 状态模式与策略模式很像【一个是通过子类封装不同状态，一个是通过子类封装不同算法】：
 
 state模式将所有与一个特定状态相关的行为都放入一个State的子类对象中，在状态切换时同步切换成相应的对象，同时维持了state的接口不变，
 这样实现了具体操作与状态转换之间的解耦
 
 当新增一个NetworkWait的状态时，只需要再继承自ZYNetworkOpen重写对应的operation方法
 */

@protocol INetworkState <NSObject>
@property (nonatomic, strong) id<INetworkState> next;

- (void)operation1;
- (void)operation2;
- (void)operation3;
@end


@interface ZYNetworkOpen : NSObject <INetworkState>
@property (nonatomic, strong) id<INetworkState> next;
+ (instancetype)sharedInstance;
@end


//ZYNetworkClose继承自单例类ZYNetworkOpen，重写单例中的方法，实现不同的状态
@interface ZYNetworkClose : ZYNetworkOpen
@end


//ZYNetworkConnect继承自单例类ZYNetworkOpen，重写单例中的方法，实现不同的状态
@interface ZYNetworkConnect : ZYNetworkOpen
@end



//主页执行
@interface ZYStateMainPage : NSObject
@property (nonatomic, strong) id<INetworkState>state;

- (instancetype)initWithState:(id<INetworkState>)state;
@end
